//-------------------------------------------------------------------
//HLW8110头文件
//可修改的几个参数
//D_K1、D_K2
//SYSCON REG、EMUCON REG、EMUCON2 REG
//
//
//-------------------------------------------------------------------


#ifndef __HLW8110_H
#define __HLW8110_H	 
//#include "sys.h"
//#include "core_cm3.h"


#include "stdio.h"


	
//IO端口定义
//#define LED0 PBout(5)	// DS0
//#define LED1 PEout(5)	// DS1



//直流校正系数

//8112  A通道或	8110通道校正系数
#define D_CAL_U		1000/1000		//电压校正系数
#define D_CAL_A_I	1000/1000		//A通道电流校正系数
#define D_CAL_A_P	1000/1000		//A通道功率校正系数
#define D_CAL_A_E	1000/1000		//A通道电能校正系数


//8112 B通道校正系数
#define D_CAL_B_P	1000/1000		//B通道功率校正系数
#define D_CAL_B_I	1000/1000		//B通道电流校正系数
#define D_CAL_B_E	1000/1000		//B通道电能校正系数

//-------------------------------------------------------------------
//K1--电流系数
//K2--电压系数
//-------------------------------------------------------------------
#define	D_K1	1			
#define D_K2	1

//-------------------------------------------------------------------
//HLW8110 REG 配置表
//SYSCON、EMUCON、EMUCON2
//-------------------------------------------------------------------

//----------- SYSCON REG (ADDR:0x00,default:0x0a04) -----------------
#define	D_REG_SYSCON_DATA_1		(D_IU_ON|D_IB_ON|D_IA_ON|D_PGA_IB|D_PGA_U|D_PGA_IA)
//*******************************************************************
//更改电压通道U/电流通道B/电流通道A，选择开启或关闭
#define D_IU_ON		U_ON						//设置电压通道	U_ON:开启，U_OFF:关闭
#define D_IB_ON		IB_OFF					//设置电流B通道	IB_ON:开启，IB_OFF:关闭
#define D_IA_ON		IA_ON						//设置电流A通道	IA_ON:开启，IA_OFF:关闭

//更改D_PGA_IA/D_PGA_IB/D_PGA_U，选择电流通道A、B，电压通道的PGA
#define	D_PGA_IA	PGAIA_16			//可选择PGAIA_16,PGAIA_08,PGAIA_04,PGAIA_02,PGAIA_01
#define	D_PGA_IB	PGAIB_16			//可选择PGAIB_16,PGAIB_08,PGAIB_04,PGAIB_02,PGAIB_01
#define	D_PGA_U		PGAU_01				//可选择PGAU_16,PGAU_08,PGAU_04,PGAU_02,PGAU_01
//*******************************************************************
//电压通道的开启或关闭，不要更改
#define U_ON			0x0800		//开启电压通道
#define	U_OFF			0x0000		//关闭电压通道
//电流通道B的开启或关闭，不要更改
#define IB_ON			0x0400		//开启电流通道B
#define	IB_OFF		0x0000		//关闭电流通道B
//电流通道A的开启或关闭，不要更改
#define IA_ON			0x0200		//开启电流通道A
#define	IA_OFF		0x0000		//关闭电流通道A
//电流通道A的PGA倍数定义，不要更改
#define	PGAIA_16		0x0004	//输入信号16倍放大
#define	PGAIA_08		0x0003	//输入信号8倍放大
#define	PGAIA_04		0x0002	//输入信号4倍放大
#define	PGAIA_02		0x0001	//输入信号2倍放大
#define	PGAIA_01		0x0000	//输入信号1倍放大
//电流通道B的PGA倍数定义，不要更改
#define	PGAIB_16		0x0100	//输入信号16倍放大
#define	PGAIB_08		0x00C0	//输入信号8倍放大
#define	PGAIB_04		0x0080	//输入信号4倍放大
#define	PGAIB_02		0x0040	//输入信号2倍放大
#define	PGAIB_01		0x0000	//输入信号1倍放大
//电压通道的PGA倍数定义，不要更改
#define	PGAU_16			0x0020	//输入信号16倍放大
#define	PGAU_08			0x0018	//输入信号8倍放大
#define	PGAU_04			0x0010	//输入信号4倍放大
#define	PGAU_02			0x0008	//输入信号2倍放大
#define	PGAU_01			0x0000	//输入信号1倍放大
//-------------------------------------------------------------------
//-------------------------------------------------------------------

//-------------------------------------------------------------------
//----------- EMUCON REG (ADDR:0x01,default:0x0000) -----------------
#define	D_REG_EMUCON_DATA_1		(D_TEMP_SENER|D_TEMP_ON|D_COMP|D_P_MODE|D_DC_MODE|D_ZERO_MODE|D_IB_HPF_OFF|D_IA_HPF_OFF|D_U_HPF_OFF|D_PFB_RUN|D_PFA_RUN)

//EMUCON2.bit15-bit14,B通道用于温度测量的测量步骤
#define	D_TEMP_SENER	TEMPERATUR_STEP1
							#define	TEMPERATUR_STEP1				0x0000			//STEP-1,default
							#define	TEMPERATUR_STEP2				0x4000			//STEP-2
							#define	TEMPERATUR_STEP3				0x8000			//STEP-3
							#define	TEMPERATUR_STEP4				0xC000			//STEP-4

//EMUCON2.bit13,B通道用于温度测量的开启或关闭，[0:关闭，1:开启]
#define D_TEMP_ON			TEMPERATUR_OFF
							#define	TEMPERATUR_OFF			0x0000			//B通道温度测量功能:关闭,default
							#define	TEMPERATUR_ON				0x2000			//B通道温度测量功能:打开

//EMUCON2.bit12,B通道用于比较器功能的开启或关闭，[0:关闭，1:开启]
#define	D_COMP	COMP_OFF				
							#define	COMP_OFF						0x0000			//B通道比较器功能:关闭,default
							#define	COMP_ON							0x1000			//B通道比较器功能:打开
							
//EMUCON2.bit11-bit10,有功电能计算方式选择
#define	D_P_MODE	PMODE_00
							#define	PMODE_00						0x0000		//正反向有功电能都参与累加，累加方式是代数和方式，反向有功功率有REVQ符号指示；defalut
							#define	PMODE_01						0x0400		//只累加正向有功电能
							#define	PMODE_10						0x0800		//正反向有功电能都参与累加，累加方式是绝对值方式,无反向有功功率指示
							#define	PMODE_11						0x0C00		//保留，模式与Pmode =00相同

//EMUCON2.bit9,芯片有效值工作模式,	[0:正常模式，1:直通模式]，交流或直流测量都是工作在正常模式
#define	D_DC_MODE	DCMODE_OFF		
							#define	DCMODE_OFF				0x0000				//=0，工作在正常的工作模式，default
							#define	DCMODE_ON					0x0200				//=1，工作在直通模式：关闭自乘、LPF和开方运算。直通模式输出有效值等需打开WaveEn使能

//EMUCON2.bit8-bit7,电压、电流过零模式选择
#define	D_ZERO_MODE	ZERO_ALL		
							#define	ZERO_UP						0x0000		//表示选择正向过零点作为过零检测信号，default
							#define	ZERO_DOWN					0x0080		//表示选择负向过零点作为过零检测信号
							#define	ZERO_ALL					0x0100		//表示在正向和负向过零点处ZX输出均发生变化
							//#define	ZERO_ALL					0x0180		//表示在正向和负向过零点处ZX输出均发生变化
							
//EMUCON2.bit6,通道B高通滤波器功能开启或关闭，[0:开启-交流信号测量，1:关闭-直流信号测量]
#define	D_IB_HPF_OFF	IBHPF_ON
							#define IBHPF_ON		0x0000			//bit - 0,使能电流通道B数字高通滤波器,用于交流信号测量,default
							#define IBHPF_OFF		0x0040			//bit = 1,关闭电流通道B数字高通滤波器,用于直流信号测量
							
//EMUCON2.bit5,通道A高通滤波器功能开启或关闭，[0:开启-交流信号测量，1:关闭-直流信号测量]
#define	D_IA_HPF_OFF	IAHPF_ON
							#define IAHPF_ON		0x0000			//bit - 0,使能电流通道A数字高通滤波器,用于交流信号测量,default
							#define IAHPF_OFF		0x0020			//bit = 1,关闭电流通道A数字高通滤波器,用于直流信号测量
							
//EMUCON2.bit4,电压通道高通滤波器功能开启或关闭，[0:开启-交流信号测量，1:关闭-直流信号测量]
#define	D_U_HPF_OFF	UHPF_ON
							#define UHPF_ON		0x0000			//bit - 0,使能电压通道U数字高通滤波器,用于交流信号测量。default
							#define UHPF_OFF	0x0010			//bit = 1,关闭电压通道U数字高通滤波器,用于直流信号测量
							
//EMUCON2.bit3-bit2,NC,0x00,default

//EMUCON2.bit1,	电流通道B，使能PFB脉冲输出和电能(用电量)累加功能
#define	D_PFB_RUN	PFB_ON
							#define PFB_OFF	0x0000			//bit = 0,关闭PFB脉冲输出和有功电能寄存器累加，default
							#define PFB_ON	0x0002			//bit = 1,，使能PFB脉冲输出和有功电能寄存器累加

//EMUCON2.bit0,	电流通道A，使能PFA脉冲输出和电能(用电量)累加功能
#define	D_PFA_RUN	PFA_ON
							#define PFA_OFF	0x0000			//bit = 0,关闭PFA脉冲输出和有功电能寄存器累加,default
							#define PFA_ON	0x0001			//bit = 1,，使能PFA脉冲输出和有功电能寄存器累加
				
//-------------------------------------------------------------------
//-------------------------------------------------------------------



//-------------------------------------------------------------------
//----------- EMUCON2 REG (ADDR:0x13,default,0x0001) ----------------
#define	D_REG_EMUCON2_DATA_1		(D_DOTPSEL|D_SDOCMOS|D_EPB_CLEAR|D_EPA_CLEAR|D_DUPSEL|D_CHSIB|D_PF_EN|D_WAVE_EN|D_SAGEN_EN|D_OVER_EN|D_ZERO_EN|D_PEAK_EN|D_VREFSEL_EN)

//EMUCON2.bit15,	defalut,0x00
#define D_DOTPSEL		DOTPSEL1					
					#define	DOTPSEL0			0x0000			//default
					#define	DOTPSEL1			0x8000			//
		
//EMUCON2.bit14-bit13,NC,default:0x00

//EMUCON2.bit12,SDO输出模式选择
#define D_SDOCMOS			CMOS_OUTPUT		
				#define	CMOS_OUTPUT						0x0000			//SDO引脚CMOS输出,defalut
				#define	OPEN_DRAIN_OUTPUT			0x1000			//SDO引脚开漏输出
		
//EMUCON2.bit11，B通电量REG设置，[0:读后清零,1:读后不清零]
#define D_EPB_CLEAR	ENERGY_PB_READ				
				#define	ENERGY_PB_READ_CLEAR			0x0000			//通道B电量REG设置为读后清0，default
				#define	ENERGY_PB_READ						0x0800			//通道B电量REG设置为读后不清0
		
//EMUCON2.bit10, A通电量REG设置，[0:读后清零,1:读后不清零]
#define D_EPA_CLEAR	ENERGY_PA_READ				
				#define	ENERGY_PA_READ_CLEAR			0x0000			//通道A电量REG设置为读后清0，default
				#define	ENERGY_PA_READ						0x0400			//通道A电量REG设置为读后不清0
		
		
//EMUCON2.bit9-bit8, 电压、电流、功率更新时间设置
#define D_DUPSEL	DataUpdat_3HZ			
				#define	DataUpdat_3HZ						0x0000				//bit9-bit8:00,电压、电流、功率更新速率3.4HZ，default
				#define	DataUpdat_6HZ						0x0100				//bit9-bit8:01,电压、电流、功率更新速率6.8HZ
				#define	DataUpdat_13HZ					0x0200				//bit9-bit8:10,电压、电流、功率更新速率13.65HZ
				#define	DataUpdat_27HZ					0x0300				//bit9-bit8:11,电压、电流、功率更新速率27.3HZ

//EMUCON2.bit7，电流通道B选择，[0:测量温度，1:测量电流]
#define D_CHSIB		IB_CURRENT_ON		
				#define	IB_TEMPSENER_ON										0x0000			//EMUCON2.bit7 = 0,B通道用于温度测量,default
				#define	IB_CURRENT_ON											0x0080			//EMUCON2.bit7 = 1,B通道用于电流
		
//EMUCON2.bit6，PF功率因数计算，开启选择，[0:关闭，1:开启]
#define D_PF_EN		PF_ON		
			#define	PF_OFF								0x0000			//EMUCON2.bit6 = 0,关闭功率因素计算
			#define	PF_ON									0x0040			//EMUCON2.bit6 = 1,开启功率因素计算

//EMUCON2.bit5，WaveEN，波形数据\瞬时数据使能开关，[0:关闭，1:开启]
#define D_WAVE_EN		WAVE_OFF		
			#define	WAVE_OFF								0x0000			//EMUCON2.bit5 = 0,关闭波形数据\瞬时数据计算
			#define	WAVE_ON									0x0020			//EMUCON2.bit5 = 1,开启波形数据\瞬时数据计算

//EMUCON2.bit4，SAGEN,电压跌落使能信号[0:关闭，1:开启]	，需先配置WaveEN = 1
#define D_SAGEN_EN		SAGEN_OFF		
			#define	SAGEN_OFF								0x0000			//EMUCON2.bit4 = 0,关闭电压跌落功能
			#define	SAGEN_ON								0x0010			//EMUCON2.bit4 = 1,开启电压跌落功能

//EMUCON2.bit3，OverEN,过压、过流、过载检测使能信号[0:关闭，1:开启]	，需先配置WaveEN = 1
#define D_OVER_EN		OVEREN_OFF		
			#define	OVEREN_OFF								0x0000			//EMUCON2.bit3 = 0,关闭过压、过流、过载检测使能信号
			#define	OVEREN_ON									0x0008			//EMUCON2.bit3 = 1,开启过压、过流、过载检测使能信号

//EMUCON2.bit2，ZxEN,过零检测、相角、电压频率测量使能信号[0:关闭，1:开启]	, 需先配置WaveEN = 1
#define D_ZERO_EN		Zx_OFF		
			#define	Zx_OFF								0x0000			//EMUCON2.bit2 = 0,关闭过零检测、相角、电压频率测量使能信号
			#define	Zx_ON									0x0004			//EMUCON2.bit2 = 1,开启过零检测、相角、电压频率测量使能信号

//EMUCON2.bit1，PeakEn,峰值检测使能信号[0:关闭，1:开启]	, 需先配置WaveEN = 1
#define D_PEAK_EN		PEAK_OFF		
			#define	PEAK_OFF								0x0000			//EMUCON1.bit1 = 0,关闭峰值检测使能信号
			#define	PEAK_ON									0x0002			//EMUCON1.bit1 = 1,开启峰值检测使能信号

//EMUCON2.bit0，内置基准选择，[0:关闭，1:开启]
#define D_VREFSEL_EN		VREFSEL_ON		
			#define	VREFSEL_OFF								0x0000			//EMUCON1.bit0 = 0,关闭内置基准
			#define	VREFSEL_ON								0x0001			//EMUCON1.bit0 = 1,开启内置基准,default


//-------------------------------------------------------------------


//-------------------------------------------------------------------
//----------- IE REG (ADDR:0x40,default,0x0000) ---------------------
//-------------------------------------------------------------------
#define	D_REG_IE_DATA_1	1
				#define IE_B_Leakgae					0x8000				//B通道漏电中断使能
				#define IE_V_ZERO							0x4000				//电压过零中断使能
				#define	IE_IA_ZERO						0x2000				//电流通道A过零信号中断使能
				#define	IE_IB_ZERO						0x1000				//电流通道B过零信号中断使能
				#define IE_SAG_V							0x0800				//电压通道欠压中断使能
				#define IE_OVER_P							0x0400				//功率过载中断使能，PA、PB共用
				#define IE_OVER_V							0x0200				//电压通道过压中断使能
				#define IE_OVER_IB						0x0100				//电流通道B过流信号中断使能
				#define IE_OVER_IA						0x0080				//电流通道A过流信号中断使能
				#define IE_INSTAN							0x0040				//瞬时值更新中断使能
				#define IE_PEB_OIE						0x0010				//B通道有功能电能REG溢出中断使能
				#define IE_PEA_OIE						0x0008				//A通道有功能电能REG溢出中断使能
				#define IE_PFB								0x0004				//电能计量校准脉冲PFB的输出中断使能
				#define IE_PFA								0x0002				//电能计量校准脉冲PFA的输出中断使能
				#define IE_DUPDIE							0x0001				//均值数据更新中断使能
				
				
//-------------------------------------------------------------------
//---------- INT REG (ADDR:0x1D,default,0x3210) ---------------------
//-------------------------------------------------------------------
#define	D_REG_INT_DATA_1	(0x3200|D_INT2_OUTPUTMODE|D_INT1_OUTPUTMODE)

//INT.bit15-bit12,	defalut,0x0011
//INT.bit11-bit8,	defalut,0x0010

//INT.bit7-bit4,INT2 PIN 输出功能选择,默认值0x01
#define	D_INT2_OUTPUTMODE		INT2_PFB
					#define INT2_PFA					0x00				//电能计量校准脉冲PFA的输出
					#define	INT2_PFB					0x10				//电能计量校准脉冲PFB的输出
					#define INT2_B_Leakgae		0x20				//B通道漏电指示信号
					#define INT2_IRQ					0x30				//中断信号IRQ输出
					#define INT2_OVER_P				0x40				//功率过载的信号指示，PA、PB共用
					#define INT2_A_REVP				0x50				//通道A负功率指示信号
					#define INT2_B_REVP				0x60				//通道B负功率指示信号
					#define INT2_INSTAN				0x70				//瞬时值更新中断输出
					#define	INT2_RMSDATA			0x80				//均值更新中断输出
					#define	INT2_V_ZERO				0x90				//电压通道过零信号输出
					#define	INT2_IA_ZERO			0xa0				//电流通道A过零信号输出
					#define	INT2_IB_ZERO			0xb0				//电流通道A过零信号输出
					#define INT2_OVER_V				0xc0				//电压通道过压指示信号输出
					#define INT2_SAG_V				0xd0				//电压通道欠压指示信号输出
					#define INT2_OVER_IA			0xe0				//电流通道A过流信号指示输出
					#define INT2_OVER_IB			0xf0				//电流通道B过流信号指示输出

//INT.bit3-bit0,INT1 PIN 输出功能选择,默认值0x00
#define	D_INT1_OUTPUTMODE		INT1_PFA
					#define INT1_PFA					0x00		//电能计量校准脉冲PFA的输出
					#define	INT1_PFB					0x01		//电能计量校准脉冲PFB的输出
					#define INT1_B_Leakgae		0x02		//B通道漏电指示信号
					#define INT1_IRQ					0x03		//中断信号IRQ输出
					#define INT1_OVER_P				0x04		//功率过载的信号指示：只能选择PA或PB
					#define INT1_A_REVP				0x05		//通道A负功率指示信号
					#define INT1_B_REVP				0x06		//通道B负功率指示信号
					#define INT1_INSTAN				0x07		//瞬时值更新中断输出
					#define	INT1_RMSDATA			0x08		//均值更新中断输出
					#define	INT1_V_ZERO				0x09		//电压通道过零信号输出
					#define	INT1_IA_ZERO			0x0a		//电流通道A过零信号输出
					#define	INT1_IB_ZERO			0x0b		//电流通道A过零信号输出
					#define INT1_OVER_V				0x0c		//电压通道过压指示信号输出
					#define INT1_SAG_V				0x0d		//电压通道欠压指示信号输出
					#define INT1_OVER_IA			0x0e		//电流通道A过流信号指示输出
					#define INT1_OVER_IB			0x0f		//电流通道B过流信号指示输出

//-------------------------------------------------------------------
//	HLW8110寄存器地址列表
//	HLW8110 REG ADDR Table
//-------------------------------------------------------------------
#define REG_SYSCON_ADDR         0x00		//系统控制寄存器
#define REG_EMUCON_ADDR         0x01		//计量控制寄存器
#define REG_HFCONST_ADDR        0x02		//脉冲频率寄存器
#define REG_PA_START_ADDR       0x03		//通道A有功起动功率设置
#define REG_PB_START_ADDR       0x04		//通道B有功起动功率设置
#define REG_PA_GAIN_ADDR       	0x05		//通道A功率增益校准寄存器
#define REG_PB_GAIN_ADDR       	0x06		//通道B率增益校准寄存器
#define REG_A_PHASE_ADDR       	0x07		//通道A相位校准寄存器
#define REG_B_PHASE_ADDR       	0x08		//通道B相位校准寄存器
#define REG_RmsPAOS_ADDR				0x0A		//通道A有功功率Offset校准
#define REG_RmsPBOS_ADDR				0x0B		//通道B有功功率Offset校准

#define REG_RmsIAOS_ADDR				0x0E		//电流通道A有效值Offset补偿
#define REG_RmsIBOS_ADDR				0x0F		//电流通道B有效值Offset补偿
#define REG_IB_GAIN_ADDR       	0x10		//电流通道B增益设置
#define REG_PS_GAIN_ADDR       	0x11		//视在功率增益校准
#define REG_PS_OS_ADDR       		0x12		//视在功率Offset补偿
#define REG_EMUCON2_ADDR        0x13		//计量控制寄存器2
#define REG_DCIA_ADDR        		0x14		//IA通道直流offset校正寄存器
#define REG_DCIB_ADDR        		0x15		//IB通道直流offset校正寄存器
#define REG_DCIC_U_ADDR        	0x16		//U通道直流offset校正寄存器
#define REG_SAGCYC_ADDR         0x17		//电压骤降周期设置
#define REG_SAGLVL_ADDR         0x18		//电压骤降阈值设置
#define REG_OVLVL_ADDR          0x19		//电压过压阈值设置
#define REG_OIALVL_ADDR         0x1A		//电流通道A过流阈值设置
#define REG_OIBLVL_ADDR         0x1B		//电流通道B过流阈值设置
#define REG_OPLVL_ADDR          0x1C		//有功功率过载阈值设置
#define REG_INT_ADDR          	0x1D		//INT1默认是输出PFA,NT2默认是输出PFB

#define REG_PFCNT_PA_ADDR       0x20		//通道A快速组合有功脉冲计数
#define REG_PFCNT_PB_ADDR       0x21		//通道B快速组合有功脉冲计数
#define REG_ANGLE_ADDR        	0x22		//相角寄存器,电流与电压之间的相角，通过命令选择：电流通道A与电压通道的相角或电流通道B与电压通道的相角
#define REG_UFREQ_ADDR          0x23    //电压频率,市电线性频率
#define REG_RMSIA_ADDR          0x24		//通道A电流的有效值，更新速率3.4/6.8/13.6/27.3Hz
#define REG_RMSIB_ADDR          0x25		//通道B电流的有效值，更新速率3.4/6.8/13.6/27.3Hz
#define REG_RMSU_ADDR           0x26		//电压有效值,更新速率3.4/6.8/13.6/27.3Hz
#define REG_PF_ADDR             0x27		//功率因数寄存器，通过命令选择：通道A的功率因数或通道B的功率因数
#define REG_ENERGY_PA_ADDR			0x28		//通道A有功电能，默认为读后清零，可配置为读后不清零
#define REG_ENERGY_PB_ADDR			0x29		//通道B有功电能，默认为读后清零，可配置为读后不清零
#define REG_POWER_PA_ADDR       0x2C		//通道A有功功率，更新速率3.4/6.8/13.6/27.3Hz
#define REG_POWER_PB_ADDR       0x2D		//通道B有功功率，更新速率3.4/6.8/13.6/27.3Hz
#define REG_POWER_PS_ADDR       0x2E		//视在功率，通过命令选择通道A或通道B的视在功率，更新速率3.4/6.8/13.6/27.3Hz
#define REG_EMUSTATUS_ADDR      0x2F		//计量状态及校验和寄存器
#define REG_PEAKIA_ADDR      		0x30		//电流通道A的峰值，50Hz线性频率下，更新速率10ms
#define REG_PEAKIB_ADDR      		0x31		//电流通道B的峰值，50Hz线性频率下，更新速率10ms
#define REG_PEAKU_ADDR      		0x32		//电压通道U的峰值，50Hz线性频率下，更新速率10ms
#define REG_IA_INSTAN_ADDR      0x33		//电流通道A瞬时值
#define REG_IB_INSTAN_ADDR      0x34		//电流通道B瞬时值
#define REG_U_INSTAN_ADDR      	0x35		//电压通道瞬时值
#define REG_WAVEIA_ADDR      		0x36		//电流通道A波形
#define REG_WAVEIB_ADDR      		0x37		//电流通道B波形
#define REG_WAVEU_ADDR      		0x38		//电压通道波形

#define REG_P_INSTAN_ADDR      	0x3C		//有功功率瞬时值，通过命令选择通道A或通道B的有功功率瞬时值
#define REG_PS_INSTAN_ADDR      0x3D		//视在功率瞬时值，通过命令选择通道A或通道B的实在功率瞬时值

#define REG_IE_ADDR          		0x40		//中断允许寄存器
#define REG_IF_ADDR          		0x41		//中断标志寄存器 （不可写）
#define REG_RIF_ADDR          	0x42		//复位中断状态寄存器
#define REG_SYSSTATUS_ADDR      0x43		//系统状态寄存器
#define REG_RDATA_ADDR          0x44		//上一次SPI读出的数据
#define REG_WDATA_ADDR          0x45		//上一次SPI写入的数据

#define REG_SPAREC9_ADDR				0x6E		//

#define REG_CHECKSUM_ADDR				0x6F		//校表系数校验和
#define REG_RMS_IAC_ADDR				0x70		//电流通道A有效值转换系数
#define REG_RMS_IBC_ADDR				0x71		//电流通道B有效值转换系数
#define REG_RMS_UC_ADDR					0x72		//电压通道U有效值转换系数
#define REG_POWER_PAC_ADDR			0x73		//电流通道A有功功率转换系数
#define REG_POWER_PBC_ADDR			0x74		//电流通道B有功功率转换系数
#define REG_POWER_SC_ADDR				0x75		//视在功率转换系数
#define REG_ENERGY_AC_ADDR			0x76		//A通道能量转换系数
#define REG_ENERGY_BC_ADDR			0x77		//B通道能量转换系数

#define REG_TRIM_RC_ADDR         0x7C		//内置时钟 Trim寄存器
#define REG_TRIM_VREF_ADDR       0x7D		//内置VrefTrim寄存器



//-------------------------------------------------------------------
//函数说明
//
//-------------------------------------------------------------------


//宏定义
#define FALSE	0
#define TRUE	0

#define D_TIME1_50MS	50


typedef struct
{
	unsigned int  DevVoltage;
	unsigned int  DevCurrentFlow;
	unsigned int  DevCurrentPower;
	unsigned int  DevQuantityElect;
}DevPowerUseData;

extern DevPowerUseData str_DevPowerData;

void Init_HLW8110(void);
void Calculate_HLW8110_MeterData(void);
void Init_HLW8112(void);
void HLW8112_Measure(void);

void Init_MAX_MIN_Value(void);
void Find_MAX_MIN_V(void);
void Find_MAX_MIN_IA(void);
void Find_MAX_MIN_IB(void);
void Find_AVERAGE_U(void);
void Find_AVERAGE_I_A(void);
void Find_AVERAGE_I_B(void);

void Read_HLW8110_Test(void);
void Read_HLW8110_Data(void);
#endif
